import GameControl from './GameControl';

// cocos埋点
// 参考文档：https://n-analytics.cocos.com/docs/zh/h5/interface_h5.html
export default class CocosAnalyticsApi {

    _TAG: any = "CocosAnalyticsApi ";
    _versions: string = "v1.0";
    _isEnable: boolean = GameControl.getInstance().getCocosState();
    _appid = '660994787';

    // 单例模式
    private static _instance: CocosAnalyticsApi = null;
    public static getInstance() {
        if (this._instance == null) {
            this._instance = new CocosAnalyticsApi();
        }
        return this._instance;
    }

    // 初始化埋点
    // 格式：Constants.CocosAnalytics.init();
    init(state: boolean) {
        if (!this._isEnable) return;
        cocosAnalytics.init({
            appID: this._appid,
            version: GameControl.getInstance().getVersion(),
            storeID: "MeiZu",
            engine: "cocos",
            appSecret: "",
            channel: "",
            callNumber: ""
        });
        cocosAnalytics.enableDebug(state);
    }

    // 开始登陆
    // Constants.CocosAnalytics.loginStart();
    loginStart() {
        if (!this._isEnable) return;
        cocosAnalytics.CAAccount.loginStart({
            channel: '1', // 获客渠道，指获取该客户的广告渠道信息   
        });
    }

    // 登陆成功
    // 格式：Constants.CocosAnalytics.loginSuccess();
    loginSuccess() {
        if (!this._isEnable) return;
        cocosAnalytics.CAAccount.loginSuccess({
            userID: 'mz',
            age: 1,             // 年龄
            sex: 1,             // 性别：1为男，2为女，其它表示未知
            channel: '1',   // 获客渠道，指获取该客户的广告渠道信息   
        })
    }

    // 登陆失败
    // 格式：Constants.CocosAnalytics.loginFailed();
    loginFailed(_string: string) {
        if (!this._isEnable) return;
        cocosAnalytics.CAAccount.loginFailed({
            reason: _string, // 失败原因
            channel: '1'
        })
    }

    // 自定义事件，事件开始
    // 参数：事件ID（必填）, 不得超过30个字符
    // 参数：事件内容（必填）
    // 格式：Constants.CocosAnalytics.onStarted({name: '事件id', values: {name: '事件ID',}});
    onStarted(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CACustomEvent.onStarted(event.name, event.values);
    }

    // 自定义事件，事件完成
    // 参数：事件ID（必填）, 不得超过30个字符
    // 格式：Constants.CocosAnalytics.onSuccess({name: '事件id', values: {name: '事件ID',}});
    onSuccess(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CACustomEvent.onSuccess(event.name, event.values);
    }

    // 自定义事件，事件取消
    // 参数：事件ID（必填）, 不得超过30个字符
    // 格式：Constants.CocosAnalytics.onCancelled({name: '事件id', values: {name: '事件ID',}});
    onCancelled(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CACustomEvent.onCancelled(event.name, event.values);
    }

    // 自定义事件，事件失败
    // 参数：事件ID（必填）, 不得超过30个字符
    // 格式：Constants.CocosAnalytics.onFailed({name: '事件id', values: {name: '事件ID',}, des: '描述'});
    onFailed(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CACustomEvent.onFailed(event.name, event.values, event.des);
    }

    // 关卡开始
    // 格式：Constants.CocosAnalytics.begin();
    begin() {
        if (!this._isEnable) return;
        cocosAnalytics.CALevels.begin({
            level: GameControl.getInstance().getPassId() + '',  // 关卡名称
        });
    }

    // 关卡完成
    // 格式：Constants.CocosAnalytics.complete();
    complete() {
        if (!this._isEnable) return;
        cocosAnalytics.CALevels.complete({
            level: GameControl.getInstance().getPassId() + '',  // 关卡名称
        });
    }

    // 关卡失败
    // 格式：Constants.CocosAnalytics.failed('玩家死亡');
    failed(reason: string) {
        if (!this._isEnable) return;
        cocosAnalytics.CALevels.failed({
            level: GameControl.getInstance().getPassId() + '',   // 关卡名称
            reason: reason  // 失败原因
        });
    }

    // 购买道具
    // 格式: 
    // const event = {
    //     itemID : "魔法瓶",       // 物品ID
    //     itemType : "蓝药",       // 物品类型
    //     itemCount : 11,         // 物品数量
    //     virtualCoin : 121,      // 购买花费的虚拟币数量
    //     virtualType : "金币",    // 购买花费的虚拟币类型
    //     consumePoint : "20"     // 购买使用的代币数量
    // }
    // Constants.CocosAnalytics.buy(event);
    buy(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CAItem.buy(event);
    }

    // 获得道具
    // 格式：
    // const enent = {
    //     itemID : "魔法瓶",       // 物品ID
    //     itemType : "蓝药",       // 物品类型
    //     itemCount : 11,         // 物品数量
    //     reason : "任务奖励"      // 获取途径
    // }
    // Constants.CocosAnalytics.get(event);
    get(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CAItem.get(event);
    }

    // 消耗道具
    // 格式：
    // const event = {
    //     itemID : "魔法瓶",       // 物品ID
    //     itemType : "蓝药",       // 物品类型
    //     itemCount : 11,         // 物品数量
    //     reason: "使用道具"       // 消耗途径
    // }
    // Constants.CocosAnalytics.consume(event);
    consume(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CAItem.consume(event);
    }

    // 广告任务开始
    // 格式：Constants.CocosAnalytics.adbegin('15分钟广告');
    adbegin(str: string) {
        if (!this._isEnable) return;
        cocosAnalytics.CAAdvertising.begin({
            adID: str,
        });
    }

    // 完成广告任务
    // 格式
    // const event = {
    //     adID : "15分钟广告",
    //     timeLong: 15*60,
    //     profit: "10钻石"
    // }
    // Constants.CocosAnalytics.adcomplete(event);
    adcomplete(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CAAdvertising.complete(event)
    }

    // 广告失败
    // 格式：
    // const event = {
    //     adID : "15分钟广告",
    //     reason : "取消播放"
    // }
    // Constants.CocosAnalytics.adfailed(event);
    adfailed(event) {
        if (!this._isEnable) return;
        cocosAnalytics.CAAdvertising.failed(event);
    }

    // 玩家等级
    // 格式：Constants.CocosAnalytics.adfailed(level);
    setLevel(level) {
        if (!this._isEnable) return;
        cocosAnalytics.CAAccount.setLevel(level);
    }
}
